<?php
/**
 * Created by PhpStorm.
 * User: wangwenshan
 * Date: 2019/1/23
 * Time: 11:51
 */

namespace app\api\controller\v1;
use app\api\service\Token as TokenService;
use app\api\service\Order as OrderService;
use app\api\model\Order as OrderModel;
use app\api\controller\BaseController;
use app\api\validate\IDMustBePositiveInt;
use app\api\validate\OrderPlace;
use app\api\validate\PagingParameter;
use app\lib\exception\OrderException;
use app\lib\exception\SuccessMessage;
use app\lib\exception\TokenException;

class Order extends BaseController
{
    // 用户在选择商品后，向api提交包含它所选择商品的相关信息
    // api在接收到信息后，需要检查订单相关商品的库存量
    // 有库存，把订单数据存入数据库中 = 下单成功，返回客户端消息，告诉客户端可以支付了。
    // 调用我们的支付接口，进行支付
    // 还需要再次进行库存量检测
    // 服务器这边就可以调用微信的支付接口进行支付
    // 微信会返回我们一个支付的结果（异步）
    // 成功，也需要进行库存量的检查
    // 成功，进行库存量的扣除；失败，返回一个支付失败的结果
    protected $beforeActionList = [
        //设置前者是后者的前置操作
        'checkExclusiveScope' => ['only' => 'placeOrder'],
        'checkPrimaryScope' => ['only' => 'getDetail,getSummaryByUser']
    ];
    public function getSummaryByUser($page = 1,$size=15){
        (new PagingParameter())->getCheck();
        $uid = TokenService::getCurrentUid();
        $pagingOrders = OrderModel::getSummaryByUser($uid,$page,$size);
        if($pagingOrders->isEmpty()){
            return [
                'data'=>[],
                'current_page'=>$pagingOrders->getCurrentPage()
            ];
        }
        $data = $pagingOrders->hidden(['snap_items','snap_address','prepay_id'])->toArray();
        return [
            'data'=>$data,
            'current_page'=>$pagingOrders->getCurrentPage()
        ];
    }
    public function getSummary($page = 1, $size = 15)
    {
        //获取订单列表
        (new PagingParameter())->getCheck();
        $uid = TokenService::getCurrentUid();
        if(!$uid){
            throw new TokenException();
        }
        $pagingOrders = OrderModel::getSummaryByPage($page, $size);
        if ($pagingOrders->isEmpty()) {
            return [
                'data' => [],
                'current_page' => $pagingOrders->getCurrentPage()
            ];
        }
        $data = $pagingOrders->hidden(['snap_items', 'snap_address', 'prepay_id'])->toArray();
        return [
            'data' => $data,
            'current_page' => $pagingOrders->getCurrentPage()
        ];
    }
    public function getDetail($id){
        (new IDMustBePositiveInt())->getCheck();
        $orderDetail = OrderModel::get($id);
        if(!$orderDetail){
            throw new OrderException();
        }
        return $orderDetail->hidden(['prepay_id']);
    }
    public function placeOrder(){
        (new OrderPlace())->getCheck();
        $products = input('post.products/a');
        $uid = TokenService::getCurrentUid();

        $order = new OrderService();
        $status = $order->place($uid,$products);
        return $status;
    }
    public function deleteOrder(){

    }
    public function delivery($id){
        (new IDMustBePositiveInt())->getCheck();
        $uid = TokenService::getCurrentUid();
        if(!$uid){
            throw new TokenException();
        }
        $orderServer= new OrderService();
        $success = $orderServer ->delivery($id);
        if($success){
            return new SuccessMessage();
        }
    }

}